package com.sumainfor.zuul.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sumainfor.common.entity.ParentDeptVo;
import com.sumainfor.zuul.validator.group.AddGroup;
import com.sumainfor.zuul.validator.group.UpdateGroup;
import lombok.Data;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 系统用户
 *
 * @author Jack Chen
 * @email pua@sumainfor.com
 * @date 2018-12-28 12:32:33
 */
@TableName("sys_user")
@Data
public class SysUserEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 用户编号
     */
    @TableId
    private Integer userId;
    /**
     * 归属公司编号
     */
    private Integer areaId;
    /**
     * 归属部门
     */
    @NotNull(message = "部门不能为空", groups = {AddGroup.class, UpdateGroup.class})
    private Integer deptId;

    /**
     * 归属区域名称
     */
    @TableField(exist = false)
    private String areaName;

    /**
     * 部门名称
     */
    @TableField(exist = false)
    private String deptName;

    /**
     * 登录名
     */
    @NotBlank(message = "用户名不能为空", groups = {AddGroup.class, UpdateGroup.class})
    private String loginName;



    /**
     * PC端openID
     */
    private String popenid;

    /**
     * 开发平台ID
     */
    private String unionid;

    /**
     * 密码
     */
    @NotBlank(message = "密码不能为空", groups = AddGroup.class)
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    @JSONField(serialize = false)
    private String password;
    /**
     * 盐
     */
    @JSONField(serialize = false)
    private String salt;
    /**
     * 工号
     */
    private String no;
    /**
     * 姓名
     */
    private String name;
    /**
     * 邮箱
     */
    @NotBlank(message = "邮箱不能为空", groups = {AddGroup.class, UpdateGroup.class})
    @Email(message = "邮箱格式不正确", groups = {AddGroup.class, UpdateGroup.class})
    private String email;
    /**
     * 电话
     */
    private String phone;
    /**
     * 手机号
     */
    private String mobile;

    /**
     * 角色ID列表
     */
    @TableField(exist = false)
    private List<Integer> roleIdList;

    /**
     * 角色ID列表
     */
    @TableField(exist = false)
    private List<SysUserRoleVo> roleList;

    /**
     * 用户微信资料
     */
    @TableField(exist = false)
    private SysUserWxEntity userWeChat;

    /**
     * 用户头像
     */
    private String userImg;
    /**
     * 最后登录IP
     */
    private String loginIp;
    /**
     * 最后登录时间
     */
    private Date loginTime;
    /**
     * 废弃标志位 0正常 1废弃
     */
    private Integer delfg;
    /**
     * 部门编号
     */
    private Integer deptid;
    /**
     * Insert时间
     */
    @JSONField(format = "yyyy-MM-dd")
    private Date instm;
    /**
     * Insert端： 1 租客端 2市场部 3 工程部   4运营部   5财务部  6总经办 7发展部
     */
    private Integer insterm;
    /**
     * Insert操作者
     */
    private String insby;
    /**
     * Insert的类+方法：如 Class.Function
     */
    private String insfnc;
    /**
     * Update时间
     */
    private Date updtm;
    /**
     * Update端： 1 租客端 2市场部 3 工程部   4运营部   5财务部  6总经办 7发展部
     */
    private Integer updterm;
    /**
     * Update操作者
     */
    private String updby;
    /**
     * Update的类+方法：如 Class.Function
     */
    private String updfnc;

    /**
     * 所有的上级部门
     */
    @TableField(exist = false)
    private ParentDeptVo parentDeptVo;

    /**
     * 如果上级有服务中心部门 那么这里存放的是所有服务中心下的部门集合
     */
    @TableField(exist = false)
    private Set<Integer> centerServiceChild;

    /**
     * 所有子部门的ID集合
     */
    @TableField(exist = false)
    private Set<Integer> bottomDeptList;
}
